package org.example.aop.annotation;

import java.lang.annotation.*;

/**
 * 分布式锁
 */
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DistributedLock {
    /**
     * 锁的key
     */
    String lockKey();

    /**
     * 锁的时间
     * 默认是一直锁着
     */
    long lockTime() default -1L;

    /**
     * 等待锁的时间
     * <p>
     * 0 不需要等待，进去就尝试获取锁
     */
    long tryLockWaitTime() default 0L;

    /**
     * 是否需要一直尝试获取锁
     * <p>
     * true：一直等着，直到获取到锁
     * false：只尝试获取一次锁，然后抛出异常 >>>>>>>>>> 请勿频发操作，刷新后尝试！
     */
    boolean needTryLock() default true;

    /**
     * 自定义异常信息
     *
     * @return
     */
    String error() default "请勿频发操作，刷新后尝试！";
}
